Django documentation

The django-admin.py utility

django-admin.py is Django's command-line utility for administrative tasks. This document outlines all it can do.

The django-admin.py script should be on your system path if you installed Django via its setup.py utility. If it's not on your path, you can find it in site-packages/django/bin within your Python installation. Consider symlinking to it from some place on your path, such as /usr/local/bin.

Usage

django-admin.py action [options]

action should be one of the actions listed in this document. options, which is optional, should be zero or more of the options listed in this document.

Run django-admin.py --help to display a help message that includes a terse list of all available actions and options.

Most actions take a list of "modelmodule"s. A "modelmodule," in this case, is the name of a file containing Django models. For example, if you have a model module called myproject/apps/polls/pollmodels.py, the "modelmodule" in this case would be "pollmodels".

Available actions

adminindex [modelmodule modelmodule ...]

Prints the admin-index template snippet for the given model module(s).

Use admin-index template snippets if you want to customize the look and feel of your admin's index page. See Tutorial 2 for more information.

createcachetable [tablename]

Creates a cache table named tablename for use with the database cache backend. See the cache documentation for more information.

createsuperuser

Creates a superuser account interactively. It asks you for a username, e-mail address and password.

init

Initializes the database with the tables and data Django needs by default. Specifically, these are the database tables from the auth and core models.

inspectdb [dbname]

Introspects the database tables in the given database and outputs a Django model module to standard output.

Use this if you have a legacy database with which you'd like to use Django. The script will inspect the database and create a model for each table within it.

This feature is meant as a shortcut, not as definitive model generation. After you run it, you'll want to look over the generated models yourself to make customizations. In particular, you'll need to do this:

  • Rearrange models' order, so that models that refer to other models are ordered properly.
  • Add primary_key=True to one field in each model. The inspectdb doesn't yet introspect primary keys.

inspectdb only works with PostgreSQL and MySQL. Foreign-key detection only works in PostgreSQL.

install [modelmodule modelmodule ...]

Executes the equivalent of sqlall for the given model module(s).

installperms [modelmodule modelmodule ...]

Installs any admin permissions for the given model module(s) that aren't already installed in the database. Outputs a message telling how many permissions were added, if any.

runserver [optional port number, or ipaddr:port]

Starts a lightweight development Web server on the local machine. By default, the server runs on port 8000 on the IP address 127.0.0.1. You can pass in an IP address and port number explicitly.

If you run this script as a user with normal privileges (recommended), you might not have access to start a port on a low port number. Low port numbers are reserved for superusers (root).

DO NOT USE THIS SERVER IN A PRODUCTION SETTING.

The development server automatically reloads Python code for each request, as needed. You don't need to restart the server for code changes to take effect.

When you start the server, and each time you change Python code while the server is running, the server will validate all of your installed models. (See the "validate" option below.) If the validator finds errors, it will print them to standard output, but it won't stop the server.

You can run as many servers as you want, as long as they're on separate ports. Just execute django-admin.py runserver more than once.

Note that the default IP address, 127.0.0.1, is not accessible from other machines on your network. To make your development server viewable to other machines on the network, use its own IP address (e.g. 192.168.2.1) or 0.0.0.0.

Examples:

Port 7000 on IP address 127.0.0.1:

django-admin.py runserver 7000

Port 7000 on IP address 1.2.3.4:

django-admin.py runserver 1.2.3.4:7000

sql [modelmodule modelmodule ...]

Prints the CREATE TABLE SQL statements for the given model module(s).

sqlall [modelmodule modelmodule ...]

Prints the CREATE TABLE and initial-data SQL statements for the given model module(s).

sqlclear [modelmodule modelmodule ...]

Prints the DROP TABLE SQL statements for the given model module(s).

sqlindexes [modelmodule modelmodule ...]

Prints the CREATE INDEX SQL statements for the given model module(s).

sqlinitialdata [modelmodule modelmodule ...]

Prints the initial INSERT SQL statements for the given model module(s).

sqlreset [modelmodule modelmodule ...]

Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given model module(s).

sqlsequencereset [modelmodule modelmodule ...]

Prints the SQL statements for resetting PostgreSQL sequences for the given model module(s).

See http://simon.incutio.com/archive/2004/04/21/postgres for more information.

startapp [appname]

Creates a Django app directory structure for the given app name in the current directory.

startproject [projectname]

Creates a Django project directory structure for the given project name in the current directory.

validate

Validates all installed models (according to the INSTALLED_APPS setting) and prints validation errors to standard output.

Available options

--settings

Example usage:

django-admin.py init --settings=myproject.settings

Explicitly specifies the settings module to use. The settings module should be in Python path syntax, e.g. "myproject.settings". If this isn't provided, django-admin.py will use the DJANGO_SETTINGS_MODULE environment variable.

--pythonpath

Example usage:

django-admin.py init --pythonpath='/home/djangoprojects/myproject'

Adds the given filesystem path to the Python import search path. If this isn't provided, django-admin.py will use the PYTHONPATH environment variable.

--help

Displays a help message that includes a terse list of all available actions and options.

Comments

Antonio September 8, 2005 at 11:39 p.m.

How do you most effectively recreate the DB schema when you change your model class (ie add an attribute)? django-admin.py seems like the place to do it no? And how about if I want to reload all the models in an app?

lawgon September 13, 2005 at 2:07 a.m.

Well, this is a bit roundabout. When i want to add a new table or two, i add them in the model. Then run the sqlall command and save the output in the file. Edit the file so that only the sql create for the new tables are there. (typically one statement for the creating table and 4 for the background stuff). Then i manually run the sql script to create the additional tables.

Manu September 15, 2005 at 10:33 a.m.

I've got a problem with django-admin.py :
django-admin.py init --settings=processing.settings.main
Error: The database couldn't be initialized.
set_isolation_level
Any ideas on this error?

SmileyChris October 12, 2005 at 12:05 p.m.

In a Win environment at least, the options do not work with single quotes:
django-admin.py init --settings='myproject.settings.main'
should be:
django-admin.py init --settings="myproject.settings.main"

Post a comment

Note: Please only use the comments for questions/critcisms/suggestions on the docs; if you experience errors please file a ticket, ask in the IRC channel, or post to the django-users list. Comments will be periodically reviewed, integrated into the documentation proper, and removed.

Your name:

Comment: